package com.ruoyi.system.mapper;

import java.util.List;
import com.ruoyi.system.domain.HaDrugPcodelist;
//引入@鲍
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;                 // ① Date 本体
import com.ruoyi.common.utils.DateUtils;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;

/**
 * 采购单自动编码Mapper接口
 * 
 * @author 鲍小伟
 * @date 2025-11-28
 */
public interface HaDrugPcodelistMapper 
{
    /**
     * 查询采购单自动编码
     * 
     * @param seqid 采购单自动编码主键
     * @return 采购单自动编码
     */
    public HaDrugPcodelist selectHaDrugPcodelistBySeqid(Long seqid);

    /**
     * 查询采购单自动编码列表
     * 
     * @param haDrugPcodelist 采购单自动编码
     * @return 采购单自动编码集合
     */
    public List<HaDrugPcodelist> selectHaDrugPcodelistList(HaDrugPcodelist haDrugPcodelist);

    /**
     * 新增采购单自动编码
     * 
     * @param haDrugPcodelist 采购单自动编码
     * @return 结果
     */
    public int insertHaDrugPcodelist(HaDrugPcodelist haDrugPcodelist);

    /**
     * 修改采购单自动编码
     * 
     * @param haDrugPcodelist 采购单自动编码
     * @return 结果
     */
    public int updateHaDrugPcodelist(HaDrugPcodelist haDrugPcodelist);

    /**
     * 删除采购单自动编码
     * 
     * @param seqid 采购单自动编码主键
     * @return 结果
     */
    public int deleteHaDrugPcodelistBySeqid(Long seqid);

    /**
     * 批量删除采购单自动编码
     * 
     * @param seqids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHaDrugPcodelistBySeqids(Long[] seqids);

    /**
     *  新增：并发安全
     *  鲍小伟@20251128
     */
//    public HaDrugPcodelist selectForUpdate(@Param("curDate") java.time.LocalDate curDate);
//    public int increaseCurNum(@Param("curDate") java.time.LocalDate curDate);

    /**
     * 幂等插入当天记录（不存在才插入）
     */
//    public  int insertIfNotExists(@Param("curDate") java.time.LocalDate curDate);


    /* ============= 新增：并发安全 ============= */
    /**
     * 行锁查询当前值（for update）
     */
    public HaDrugPcodelist selectForUpdate(@Param("curDate") java.time.LocalDate curDate);

    /**
     * 原子+1
     */
    int increaseCurNum(@Param("curDate") java.time.LocalDate curDate);

    /**
     * 幂等插入当天记录（不存在才插入）
     */
    int insertIfNotExists(@Param("curDate") java.time.LocalDate curDate);

    /**
     * 查询最小空号（PREVIEW）
     * 鲍小伟@20251201
     */
   public HaDrugPcodelist selectMinPreview(@Param("curDate") java.time.LocalDate curDate);
    /**
     * 标记已使用
     * 鲍小伟@20251201
     */
   public int markUsed(@Param("seqid") Long seqid);

   /**
    * 锁定单号
    * @鲍小伟20251201
    * */
   public int markLocked(@Param("seqid") Long seqid);
    /**
     * 插入新号（仅当无空号时）
     * 鲍小伟@20251201
     */
   public void insertNewRow(HaDrugPcodelist po);
    /**
     * 取出当天已经使用的最大号
     * 鲍小伟@20251201
     */
   public int getTodayMaxNum(@Param("curDate") java.time.LocalDate curDate);

   //根据id变更状态@鲍小伟20251201
   public int sfMinPurchaseNo(@Param("seqid") Long seqid);

}
